//
//  Materiel.m
//  Metronome
//
//  Created by Thomas Dupont on 23/09/09.
//  Copyright 2009 __MyCompanyName__. All rights reserved.
//

#import "Materiel.h"
#import "Horloge.h"
#import "CocoaClavier.h"
#import "CocoaMolette.h"
#import "CocoaEmetteurSonore.h"
#import "CocoaAfficheur.h"

@interface Materiel (privateMethods)
- (void)load;
@end


@implementation Materiel

static Materiel *sharedMateriel = nil;

+ (Materiel*)sharedMateriel
{
    if (sharedMateriel == nil) {
        sharedMateriel = [[super alloc] init];
		[sharedMateriel load];
    }
    return sharedMateriel;
}

- (void)dealloc
{
	[super dealloc];
}

- (void)load
{
	emetteurSonore = [CocoaEmetteurSonore new];
}

- (id<HorlogeProtocol>)horloge
{
	if (horloge != nil) {
		return horloge;
	}
	horloge = [Horloge new];
	return horloge;
}

- (id<MoletteProtocol>)molette
{
	if (molette != nil) {
		return molette;
	}
	molette = [[CocoaMolette alloc] initWithNibName:@"CocoaMolette" bundle:nil];
	return molette;
}

- (id<ClavierProtocol>)clavier
{
	if (clavier != nil) {
		return clavier;
	}
	clavier = [[CocoaClavier alloc] initWithNibName:@"CocoaClavier" bundle:nil];
	return clavier;
}

- (id<EmetteurSonoreProtocol>)emetteurSonore
{
	if (emetteurSonore != nil) {
		return emetteurSonore;
	}
	emetteurSonore = [CocoaEmetteurSonore new];
	return emetteurSonore;
}

- (id<AfficheurProtocol>)afficheur
{
	if (afficheur != nil) {
		return afficheur;
	}
	afficheur = [[CocoaAfficheur alloc] initWithNibName:@"CocoaAfficheur" bundle:nil];
	return afficheur;
}

@end
